/**
 * map转化工具
 */
export class MapUtil {
  /**
   * map转换为array
   * @param map 转换数据
   * @returns 数组
   */
  public static mapToArray<T>(map: Map<string, T>): Array<T> {
    const array = [];
    map.forEach(value => {
      array.push(value);
    });
    return array;
  }

  /**
   * 将source中数据合并到dest，dest中的值会被改变
   * @param source 源map
   * @param dest 合并后map
   * @returns 合并后的dest
   */
  public static concatMap<K, V>(source: Map<K, V>, dest: Map<K, V>): Map<K, V> {
    source.forEach((value, key) => {
      dest.set(key, value);
    });
    return dest;
  }

  /**
   * 数组转map
   * @param array 被转换数组
   * @param key 指明map的key 默认为id
   */
  public static arrayToMap<K, V>(array: Array<V>, key: string = 'id'): Map<K, V> {
    const map: Map<K, V> = new Map<K, V>();
    array.forEach(item => {
      map.set(item[key], item);
    });
    return map;
  }
}
